import java.util.*;

public class groupAnagrams {
    public List<List<String>> groupAnagrams(String[] strs) {
        // 异位词，对每一个字符排序后在比较一样啧加入一起
        List<List<String>> res = new ArrayList<>();
        Map<String, List<String>> m = new HashMap<>();
        for (String str : strs) {
            //转为字符数组并排序，利用arrays.sort()方法对字符数组进行排序
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String key = new String(chars);
            if (!m.containsKey(key)) {
                m.put(key, new ArrayList<>());
            }
            m.get(key).add(str);
        }
        /*entry 是 Map.Entry<String, List<String>> 类型的变量，它表示 Map 中的一个键值对。这个循环是以 Map.Entry 的集合为变量进行遍历的，每次循环获得的是 m（这是一个 HashMap）中的一个键值对。
        具体来说：
        entry.getKey() 会返回当前的键，也就是排序后的字符串。
        entry.getValue() 会返回对应的值，也就是具有相同异位词特征的字符串列表。
        * */
        for (Map.Entry<String, List<String>> entry : m.entrySet()) {
            res.add(entry.getValue());
        }
        return res;
    }
}
